home *** CD-ROM | disk | FTP | other *** search
- #include "global.h"
- #include "mbuf.h"
- #include "iface.h"
- #include "kiss.h"
- #include "trace.h"
-
- /* Send raw data packet on KISS TNC */
- kiss_raw(iface,data)
- struct iface *iface;
- struct mbuf *data;
- {
- register struct mbuf *bp;
-
- /* Put type field for KISS TNC on front */
- if((bp = pushdown(data,1)) == NULLBUF){
- free_p(data);
- return;
- }
- bp->data[0] = KISS_DATA;
- slip_raw(iface,bp);
- }
-
- /* Process incoming KISS TNC frame */
- void
- kiss_recv(iface,bp)
- struct iface *iface;
- struct mbuf *bp;
- {
- char kisstype;
-
- kisstype = pullchar(&bp);
- switch(kisstype & 0xf){
- case KISS_DATA:
- ax_recv(iface,bp);
- break;
- default:
- free_p(bp);
- break;
- }
- }
- /* Perform device control on KISS TNC by sending control messages */
- kiss_ioctl(iface,argc,argv)
- struct iface *iface;
- int argc;
- char *argv[];
- {
- struct mbuf *hbp;
- int i;
- char *cp;
-
- if(argc < 1){
- printf("Data field missing\r\n");
- return 1;
- }
- /* Allocate space for arg bytes */
- if((hbp = alloc_mbuf((int16)argc)) == NULLBUF){
- free_p(hbp);
- return 0;
- }
- hbp->cnt = argc;
- hbp->next = NULLBUF;
- for(i=0,cp = hbp->data;i < argc;)
- *cp++ = atoi(argv[i++]);
-
- slip_raw(iface,hbp); /* Even more "raw" than kiss_raw */
- return 0;
- }
- int ki_dump(bpp,check)
- struct mbuf **bpp;
- int check;
- {
- char type;
- char val;
-
- printf("KISS: ");
- pullup(bpp,(char *)&type,1);
- if(uchar(type) == KISS_DATA){
- printf("Data\n");
- ax25_dump(bpp,check);
- return;
- }
- pullup(bpp,(char *)&val,1);
- switch(uchar(type)){
- case KISS_TXD:
- printf("TX Delay: %lu ms\n",uchar(val) * 10L);
- break;
- case KISS_P:
- printf("Persistence: %u/256\n",uchar(val) + 1);
- break;
- case KISS_ST:
- printf("Slot time: %lu ms\n",uchar(val) * 10L);
- break;
- case KISS_TXT:
- printf("TX Tail time: %lu ms\n",uchar(val) * 10L);
- break;
- case KISS_FD:
- printf("Duplex: %s\n",uchar(val) == 0 ? "Half" : "Full");
- break;
- case KISS_HW:
- printf("Hardware %u\n",uchar(val));
- break;
- case KISS_RETURN:
- printf("RETURN\n");
- break;
- default:
- printf("code %u arg %u\n",uchar(type),uchar(val));
- break;
- }
- }
-